package com.logicalthinking.socialmall.common.vo.responseVo.product;

import com.github.chenlijia1111.utils.core.StringUtils;
import com.github.chenlijia1111.utils.math.GpsUtil;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;

import java.util.Objects;

/**
 * 客户端产品列表对象
 * <p>
 * 客户要求根据类别实现混排 不要查出来全是一个类别的(这个要求最后实现,比较复杂)
 *
 * @author Chen LiJia
 * @since 2020/2/19
 */
@ApiModel
@Setter
@Getter
public class AppProductListVo {

    /**
     * 产品id
     */
    @ApiModelProperty("产品id")
    private String productId;

    /**
     * 产品名称
     */
    @ApiModelProperty("产品名称")
    private String productName;

    /**
     * 产品图片
     */
    @ApiModelProperty("产品图片")
    private String productImages;

    /**
     * 价格范围
     */
    @ApiModelProperty("价格范围")
    private String priceRange;

    /**
     * 发布位置经度
     */
    @ApiModelProperty("发布位置经度")
    private Double releaseAddressLongitude;

    /**
     * 发布位置纬度
     */
    @ApiModelProperty("发布位置纬度")
    private Double releaseAddressLatitude;

    /**
     * 发布地址
     */
    @ApiModelProperty("发布地址")
    private String releaseAddress;

    /**
     * 距离
     * 单位千米
     */
    @ApiModelProperty("距离 单位千米")
    private Double distance;


    /**
     * 处理价格范围
     *
     * @param priceRange
     */
    public void setPriceRange(String priceRange) {
        if (StringUtils.isNotEmpty(priceRange)) {
            String[] split = priceRange.split("-");
            if (split.length == 2 && Objects.equals(split[0], split[1])) {
                priceRange = split[0];
            }
        }
        this.priceRange = priceRange;
    }

    /**
     * 计算距离
     *
     * @param lon 当前用户经度
     * @param lat 当前用户纬度
     */
    public void calculateDistance(Double lon, Double lat) {
        if (Objects.nonNull(this.releaseAddressLongitude) && Objects.nonNull(this.releaseAddressLatitude)) {
            double v = GpsUtil.GetDistance(lon, lat, this.releaseAddressLongitude, this.releaseAddressLatitude);
            this.distance = v;
        }
    }

}
